﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AudiPyme.DAL;

namespace AudiPyme.BLL
{
    //Clase para formatear los datos de la Matriz Amenaza - Control de la base de conocimiento
    public class TablaMatrizAmenContr
    {
        int idAmenaza;
        String amenaza;
        int idControl;
        String control;

        public int IdAmenaza
        {
            get { return idAmenaza; }
            set { idAmenaza = value; }
        }


        public String Amenaza
        {
            get { return amenaza; }
            set { amenaza = value; }
        }


        public int IdControl
        {
            get { return idControl; }
            set { idControl = value; }
        }


        public String Nombre
        {
            get { return control; }
            set { control = value; }
        }

        public TablaMatrizAmenContr()
        {
            idAmenaza = 0;
            amenaza = "";
            idControl = 0;
            Nombre = "";
        }
        public TablaMatrizAmenContr(int IdAmenaza, String Amenaza, int IdControl, String Control)
        {
            this.idAmenaza = IdAmenaza;
            this.amenaza = Amenaza;
            this.idControl = IdControl;
            this.Nombre = Control;
        }

        //Método que devuelve las relaciones Amenaza - Control actuales de la base de conocimiento
        public static List<TablaMatrizAmenContr> RelacionesAmenazaControl()
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<TablaMatrizAmenContr> LRelaciones = new List<TablaMatrizAmenContr>();
            IQueryable<TablaMatrizAmenContr> relaciones = (from m in agenteBD.Matriz_Amenazas_ControlesEstablecer
                                                           join a in agenteBD.AmenazasEstablecer on m.IdAmenaza equals a.IdAmenaza
                                                           join c in agenteBD.ControlesEstablecer on m.IdControl equals c.IdControl
                                                           where m.Actual == true
                                                           select new TablaMatrizAmenContr { IdAmenaza = m.IdAmenaza, Amenaza = a.Amenaza, IdControl = m.IdControl, Nombre = c.Nombre }).Distinct().OrderBy(i => i.IdAmenaza).ThenBy(c => c.IdControl);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }

        //Método que devuelve las relaciones Amenaza - Control eliminadas (borrado lógico) de la base de conocimiento
        public static List<TablaMatrizAmenContr> RelacionesAmenazaControlEliminadas()
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<TablaMatrizAmenContr> LRelaciones = new List<TablaMatrizAmenContr>();
            IQueryable<TablaMatrizAmenContr> relaciones = (from m in agenteBD.Matriz_Amenazas_ControlesEstablecer
                                                           join a in agenteBD.AmenazasEstablecer on m.IdAmenaza equals a.IdAmenaza
                                                           join c in agenteBD.ControlesEstablecer on m.IdControl equals c.IdControl
                                                           where m.Actual == false
                                                           select new TablaMatrizAmenContr { IdAmenaza = m.IdAmenaza, Amenaza = a.Amenaza, IdControl = m.IdControl, Nombre = c.Nombre }).Distinct().OrderBy(i => i.IdAmenaza).ThenBy(c => c.IdControl);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }

        //Método que devuelve las relaciones Amenaza - Control actuales de la base de conocimiento cuyo nombre de amenaza contenga la secuencia introducida en TextoBuscar
        public static List<TablaMatrizAmenContr> RelacionesAmenazaControlPorAmenaza(String TextoBuscar)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<TablaMatrizAmenContr> LRelaciones = new List<TablaMatrizAmenContr>();
            IQueryable<TablaMatrizAmenContr> relaciones = (from m in agenteBD.Matriz_Amenazas_ControlesEstablecer
                                                           join a in agenteBD.AmenazasEstablecer on m.IdAmenaza equals a.IdAmenaza
                                                           join c in agenteBD.ControlesEstablecer on m.IdControl equals c.IdControl
                                                           where a.Amenaza.Contains(TextoBuscar) && m.Actual == true
                                                           select new TablaMatrizAmenContr { IdAmenaza = m.IdAmenaza, Amenaza = a.Amenaza, IdControl = m.IdControl, Nombre = c.Nombre }).Distinct().OrderBy(i => i.IdAmenaza).ThenBy(c => c.IdControl);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }

        //Método que devuelve las relaciones Amenaza - Control eliminadas de la base de conocimiento cuyo nombre de amenaza contenga la secuencia introducida en TextoBuscar
        public static List<TablaMatrizAmenContr> RelacionesAmenazaControlEliminadasPorAmenaza(String TextoBuscar)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<TablaMatrizAmenContr> LRelaciones = new List<TablaMatrizAmenContr>();
            IQueryable<TablaMatrizAmenContr> relaciones = (from m in agenteBD.Matriz_Amenazas_ControlesEstablecer
                                                           join a in agenteBD.AmenazasEstablecer on m.IdAmenaza equals a.IdAmenaza
                                                           join c in agenteBD.ControlesEstablecer on m.IdControl equals c.IdControl
                                                           where a.Amenaza.Contains(TextoBuscar) && m.Actual == false
                                                           select new TablaMatrizAmenContr { IdAmenaza = m.IdAmenaza, Amenaza = a.Amenaza, IdControl = m.IdControl, Nombre = c.Nombre }).Distinct().OrderBy(i => i.IdAmenaza).ThenBy(c => c.IdControl);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }

        //Método que devuelve las relaciones Amenaza - Control actuales de la base de conocimiento cuyo nombre de control contenga la secuencia introducida en TextoBuscar
        public static List<TablaMatrizAmenContr> RelacionesAmenazaControlPorControl(String TextoBuscar)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<TablaMatrizAmenContr> LRelaciones = new List<TablaMatrizAmenContr>();
            IQueryable<TablaMatrizAmenContr> relaciones = (from m in agenteBD.Matriz_Amenazas_ControlesEstablecer
                                                           join a in agenteBD.AmenazasEstablecer on m.IdAmenaza equals a.IdAmenaza
                                                           join c in agenteBD.ControlesEstablecer on m.IdControl equals c.IdControl
                                                           where c.Nombre.Contains(TextoBuscar) && m.Actual == true
                                                           select new TablaMatrizAmenContr { IdAmenaza = m.IdAmenaza, Amenaza = a.Amenaza, IdControl = m.IdControl, Nombre = c.Nombre }).Distinct().OrderBy(i => i.IdAmenaza).ThenBy(c => c.IdControl);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }

        //Método que devuelve las relaciones Amenaza - Control eliminadas de la base de conocimiento cuyo nombre de control contenga la secuencia introducida en TextoBuscar
        public static List<TablaMatrizAmenContr> RelacionesAmenazaControlEliminadasPorControl(String TextoBuscar)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<TablaMatrizAmenContr> LRelaciones = new List<TablaMatrizAmenContr>();
            IQueryable<TablaMatrizAmenContr> relaciones = (from m in agenteBD.Matriz_Amenazas_ControlesEstablecer
                                                           join a in agenteBD.AmenazasEstablecer on m.IdAmenaza equals a.IdAmenaza
                                                           join c in agenteBD.ControlesEstablecer on m.IdControl equals c.IdControl
                                                           where c.Nombre.Contains(TextoBuscar) && m.Actual == false
                                                           select new TablaMatrizAmenContr { IdAmenaza = m.IdAmenaza, Amenaza = a.Amenaza, IdControl = m.IdControl, Nombre = c.Nombre }).Distinct().OrderBy(i => i.IdAmenaza).ThenBy(c => c.IdControl);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }


    }
}
